#include<iostream>
#include<vector>
#include<unordered_map>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<string>
#include<stack>
#include<queue>
#include<numeric>

using namespace std;


// This is the interface that allows for creating nested lists.
// You should not implement it, or speculate about its implementation
class NestedInteger {
  public:
    // Return true if this NestedInteger holds a single integer, rather than a nested list.
    bool isInteger() const;
    // Return the single integer that this NestedInteger holds, if it holds a single integer
    // The result is undefined if this NestedInteger holds a nested list
    int getInteger() const;
    // Return the nested list that this NestedInteger holds, if it holds a nested list
    // The result is undefined if this NestedInteger holds a single integer
    const vector<NestedInteger> &getList() const;
};


class NestedIterator {
private:
    int index;
    vector<int>data;
    void dfs(const vector<NestedInteger> &NestedList){
        if(!NestedList.size())return;
        for(int i = 0; i < NestedList.size(); i++){
            if(NestedList[i].isInteger())data.push_back(NestedList[i].getInteger());
            else dfs(NestedList[i].getList());
        }
    }
public:
    NestedIterator(vector<NestedInteger> &nestedList) {
        index = 0;
        dfs(nestedList);
    }
    
    int next() {
        return data[index++];
    }
    
    bool hasNext() {
        return index < data.size();
    }
};

/**
 * Your NestedIterator object will be instantiated and called as such:
 * NestedIterator i(nestedList);
 * while (i.hasNext()) cout << i.next();
 */


int main(){
}

//2021.3.23
//


